# n ip存储与读取文件统计ip频率 (京东二面题)
# • 生成一个大文件ips.txt,要求120000行，每行随即为172.25.254.0/24段的ip;
# • 读取ips.txt文件统计这个文件中ip出现频率前10的ip；
#  每一行的内容是172.25.254.{1-255}随机出现

import random

#以追加模式打开ips.txt文件，生成open对象fp
fp = open("ips.txt","a+")
#随机生成ip地址，写入文本
for i in range(120000):
    ip_tail = random.randint(1,254)
    ip = "172.25.254." + str(ip_tail)
    fp.write(ip+"\n")

fp.seek(0)
#定义一个集合，存储ip地址出现的次数
ip_number = {}
#逐行遍历列表，ip如果存在字典里，value就+1，否则将ip地址写入字典里，并且value赋值为1
for line in fp.readlines():
    if line in ip_number:
        ip_number[line] += 1
    else:
        ip_number[line] = 1
#将字典里的value值存入一个列表
lst = list(ip_number.values())
#将出现的次数排序
lst.sort()
# 去掉前10个ip
lst1 = lst[0:10]
# 定义一个字典，存取最后的结果
result = {}
# 遍历ip_number的键值对，如果对第二个元素（出现的次数）在列表里，就将这对键值存入result
for i in ip_number.items():
    if i[1] in lst1:
        result[i[0]] = i[1]
# 遍历字典，打印结果
for i,j in result.items():
    print(f"{i[0:-1]}:{j}")